协方差矩阵

协方差

Pasted image 20240613145129.png

协方差公式定义:

协方差矩阵: Pasted image 20240613145718.png Pasted image 20240613150244.png上面的两个散点图分别展示了两种不同协方差矩阵生成的随机点分布:

  1. 左图对应协方差矩阵 。这种矩阵是一个单位矩阵,表示两个变量之间没有线性关系。图中的点均匀分布在XY轴的范围内,各方向上的离散程度相似。

  2. 右图对应协方差矩阵 。这种矩阵是一个退化矩阵,表示两个变量完全线性相关。你会发现图中的点几乎排列成一条线,沿着 方向分布。

为什么会这样?

  • 单位矩阵 :

    • 协方差矩阵中的对角线元素(1和1)表示变量X和Y的方差,反映了数据在X和Y方向的分布广度。
    • 非对角线元素为0,表示变量X和Y之间没有线性关系,数据在各个方向上独立分布。
  • 退化矩阵 :

    • 对角线元素相同,表示X和Y方向的分布广度相同。
    • 非对角线元素(1和1)表示变量X和Y之间的完全正线性关系。X和Y总是同时增大或同时减小,导致数据点几乎沿着 线排列。

通过这种直观的观察,你可以看到不同的协方差矩阵如何影响数据的分布。单位矩阵生成的点分布更分散,而退化矩阵生成的点更集中,沿某个方向排列。这有助于理解数据中的变量之间的关系以及它们对数据分布的影响。

import numpy as np
import matplotlib.pyplot as plt

# Setting random seed for reproducibility
np.random.seed(42)

# Generate 100 random points for each covariance matrix
mean = [0, 0]
cov_identity = [[1, 0], [0, 1]]
cov_degenerate = [[1, 1], [1, 1]]

data_identity = np.random.multivariate_normal(mean, cov_identity, 100)
data_degenerate = np.random.multivariate_normal(mean, cov_degenerate, 100)

# Plot the scatter plots
fig, ax = plt.subplots(1, 2, figsize=(12, 6))

# Scatter plot for identity covariance matrix
ax[0].scatter(data_identity[:, 0], data_identity[:, 1], color='blue', alpha=0.5)
ax[0].set_title('Covariance Matrix [1, 0; 0, 1]')
ax[0].set_xlim(-5, 5)
ax[0].set_ylim(-5, 5)
ax[0].set_xlabel('X-axis')
ax[0].set_ylabel('Y-axis')
ax[0].grid(True)

# Scatter plot for degenerate covariance matrix
ax[1].scatter(data_degenerate[:, 0], data_degenerate[:, 1], color='red', alpha=0.5)
ax[1].set_title('Covariance Matrix [1, 1; 1, 1]')
ax[1].set_xlim(-5, 5)
ax[1].set_ylim(-5, 5)
ax[1].set_xlabel('X-axis')
ax[1].set_ylabel('Y-axis')
ax[1].grid(True)

plt.tight_layout()
plt.show()